package cn.edu.lcu.cs.designpattern.singleton;

import java.util.LinkedList;
import java.util.Queue;

/**
 * 模拟数据库连接池
 *
 * @author ling
 */
public class ConnectionPool {
    private final static int MAX_COUNT = 15;
    private static Queue<Connection> pool;

    /**
     * 创建若干连接到连接池中，仅在类加载时执行一次
     */
    static {
        pool = new LinkedList<Connection>();
        for (long i = 0; i < MAX_COUNT; i++) {
            Connection connection = new Connection("url", "user" + i, "123");
//            pool.add(connection); // 添加元素到队列，可能抛异常
            pool.offer(connection); // 添加元素到队列，不抛异常
        }
    }

    /**
     * 从连接池中获取连接并返回
     *
     * @return
     */
    public static Connection open() {
        return getConnection();
    }

    /**
     * 从连接池中获取连接并返回
     *
     * @return
     */
    public static Connection getConnection() {
        return pool.poll(); // 队首元素出队列，不抛异常
//        return pool.remove(); // 队首元素出队列，可能抛异常
    }

    /**
     * 把连接归还到连接池
     */
    public static void close(Connection connection) {
        pool.offer(connection);
    }
}
